package org.minuframework.baidu.location;

import java.util.Map;
import org.json.JSONObject;
import org.minuframework.baidu.Location;
import org.minuframework.json.GsonUtils;
import org.minuframework.net.HttpUtils;
import org.minuframework.net.RequestMethod;
import com.google.common.collect.Maps;

public class BaiduLocationAPI {

    public static final String BAIDU_LOCATION_URL = "http://api.map.baidu.com/location/ip";

    /**
     * @param ip 用户上网的IP地址，请求中如果不出现、或为空，会针对发来请求的IP进行定位
     * @param ak 密钥，可在API控制台申请获得
     * @param sn 若用户所用AK的校验方式为SN校验时该参数必填（什么是SN校验？）。其他AK校验方式的可不填写
     * @param coor 设置返回位置信息中，经纬度的坐标类型，分别如下： coor不出现、或为空：百度墨卡托坐标，即百度米制坐标 coor =
     *        BD09ll：百度经纬度坐标，在国测局坐标基础之上二次加密而来 coor = GCJ02：国测局02坐标，在原始GPS坐标基础上，按照国家测绘行业统一要求，加密后的坐标
     *        注意：百度地图的坐标类型为BD09ll，如果结合百度地图使用，请注意坐标选择
     * @return Location
     */
    /**
     * @param params
     * @return
     */
    public static Location location(Map<String, Object> params) {
        JSONObject jsonString =
                HttpUtils.sendHttpWithJSON(BAIDU_LOCATION_URL, params, RequestMethod.GET);
        try {
            Location location = GsonUtils.fromGSONString(jsonString.toString(), Location.class);
            return location;
        } catch (Exception e) {
            // e.printStackTrace();
            return null;
        }
    }

    public static void main(String[] args) {
        Map<String, Object> paramMap = Maps.newHashMap();
        paramMap.put("ip", "171.15.159.97");
        paramMap.put("ak", "CycH4Hg3qL2OxHlIrwFH92yhij11Yjo2");
        Location location = location(paramMap);
        System.out.println(GsonUtils.toGSONString(location));
    }

}
